package com.xlkj.ms.tools.aop.factory;

/**
 * 
 * @author zhuqifeng
 * @date 2021/11/10 14:08
 * @package com.xlkj.ms.tools.aop.factory
 */
public interface InitializingAop {

    /**
     * 这个由调用方去实现，意义在于调method前对请求参数做一些业务逻辑处理
     * <ul>
     *     <li>在参数校验后执行</li>
     *     <li>在JoinPoint.proceed()前执行</li>
     * </ul>
     * @param requests
     */
    void beforeProceed(Object[] requests);

    /**
     * 当异常抛出后，需要自行处理异常的可以在这里实现逻辑
     * <ul>
     *     <li>在Exception和Throwable中执行</li>
     *     <li>不在CommonsBizException和IllegalArgumentException中执行</li>
     * </ul>
     * @param throwable
     */
    void handleWhenException(Throwable throwable);

    /**
     * 在finally代码块中执行
     * @param requests
     * @param response
     */
    void handleFinally(Object[] requests, Object response);
}
